package org.eliza.base.basicx.oop.classx

/*-*- coding:utf-8 -*-
* @Author  : ygree 
* @Time    : 2021/7/2 2:25
* @Software : IntelliJ IDEA
*/

// 抽象类
// 抽象是面向对象编程的特征之一，类本身，或类中的部分成员，都可以声明为abstract的。抽象成员在类中不存在具体的实现。
// 注意：无需对抽象类或抽象成员标注open注解。
private abstract class Derived(p: Int) : Base(p) {
    abstract override fun f()
}

private open class Base(p: Int) {
    open fun f() {
        println("Base.f()")
    }
}

private class Outer { // 外部类
    private val bar: Int = 1

    class Nested : Base(10) { // 嵌套类
        fun foo() = 2
    }
}

private  fun main() {
    val nested = Outer.Nested() //外部类.嵌套类
    println(nested.foo()) // .嵌套类方法
    nested.f()  // abstract 方法
}
